package com.zyx.crawlerdemo.makrocrawler.parse;

import java.util.List;

import com.zyx.crawlerdemo.makrocrawler.model.ParameterModel;
import com.zyx.crawlerdemo.makrocrawler.model.ProductModel;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import com.alibaba.fastjson.JSON;

import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;
import cn.edu.hfut.dmic.webcollector.model.Page;

/**
 * @author Yaxi.Zhang
 * @since 2021/8/12 15:04
 * desc: 解析获取的数据
 */
public class Parse {
    /**
     * 针对每个品牌
     * 解析得到品牌下产品的id,名称等
     * 将产品的URL,添加到下一层需要访问的页面
     * 并将type设置为ThirdLayer
     */
    public static void getProductData(Page page, List<ProductModel> listPro, CrawlDatums next) {
        // 解析第二层页面
        Elements elements = page
                .select("input[class=js-gtmProductListItem]");
        for (Element ele : elements) {
            // 数据封装在JSON中,使用fastjson解析
            ProductModel model = JSON.parseObject(ele.attr("value"),
                    ProductModel.class);
            listPro.add(model);
        }
        // 添加第三层需要采集的URL
        Elements urlElements = page
                .select("a[class=product-tile-inner__img]");
        for (Element ele : urlElements) {
            //拼接URL
            String productUrl = "https://www.makro.co.za"
                    + ele.attr("href");
            // 添加到下面访问的URL
            next
					.add(productUrl)
                    // 第三层次
                    .type("ThirdLayer");
        }

    }

    /**
     * 针对每个产品
     * 解析得到产品的具体参数信息,包括：产品id
     * 产品描述和产品型号
     */
    public static void getParData(Page page, List<ParameterModel> listPar) {
        String productId = page
                .select("span[itemprop=productId]").text();
        String description = page
                .select("span[itemprop=description]").text();
        String model = page
                .select("span[itemprop=model]").text();
        ParameterModel pModel = new ParameterModel();
        pModel.setProductId(productId);
        pModel.setDescription(description);
        listPar.add(pModel);
    }
}
